package 练习;

public class RegexDemo4 {
    public static void main(String[] args) {
        //请编写正则表达式验证用户输入的手机号码是否满足要求。
        //请编写正则表达式验证用户输入的邮箱号是否满足要求。
        //请编写正则表达式验证用户输入的电话号码是否满足要求。
       // 验证手机号码 13112345678 13712345667 13945679027 139456790271
       // 验证座机电话号码 020-2324242 02122442 027-42424 0712-3242434
        //验证邮箱号码 3232323@qq.com zhangsan@itcast.cnn dlei000@163.com dlei000@pci.com.cn
        //拿着正确的从左到右依次比对  13112345678
        //首位只能是1,第二位是3到9之间后面数字任意出现9次
        String regex1="1[3-9]\\d{9}";
        System.out.println("13112345678".matches(regex1));
        System.out.println("13712345667".matches(regex1));
        System.out.println("13945679027".matches(regex1));
        System.out.println("139456790271".matches(regex1));
        //座机电话号码 020-2324242
        //第一部分 020 0开头3位到四位
        //第二部分-出现一次或0次
        //第三部分数字出现开头不为0,长度4-10
        String regex2="0\\d{2,3}-?[1-9]\\d{4,9}";
        System.out.println("020-2324242".matches(regex2));
        System.out.println("02122442".matches(regex2));
        System.out.println("027-42424".matches(regex2));
        System.out.println("0712-3242434".matches(regex2));
        //邮箱号码 3232323@qq.com
        //第一部分@左边\\w+
        //第二部分@出现一次
        //第三部分@右边
        String regex3="\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
        System.out.println("3232323@qq.com".matches(regex3));
        System.out.println("zhangsan@itcast.cnn".matches(regex3));
        System.out.println("dlei000@163.com".matches(regex3));
        System.out.println("dlei000@pci.com.cn".matches(regex3));
        /*正则表达式练习：
            需求
                请编写正则表达式验证用户名是否满足要求。
                要求：大小写字母，数字，下划线一共4 - 16位
                请编写正则表达式验证身份证号码是否满足要求。
                简单要求：18位，前17位任意数字，最后一位可以是数字可以是大写或小写的x
                复杂要求：按照身份证号码的格式严格要求。

        身份证号码：
            41080119930228457x
            510801197609022309
            15040119810705387X
            130133197204039024
            430102197606046442
    */

            //用户名要求：大小写字母，数字，下划线一共4 - 16
        String  regex4="\\w{4,16}";
        System.out.println("zhangsan".matches(regex4));
        //身份证号码：
        //18位,前17任意数,最后一位为数或大小写的X;
        String regex5="[1-9]\\d{16}[\\dXx]";
        System.out.println("41080119930228457x".matches(regex5));
        System.out.println("510801197609022309".matches(regex5));
        System.out.println("15040119810705387X".matches(regex5));
        System.out.println("130133197204039024".matches(regex5));
        System.out.println("430102197606046442".matches(regex5));
        //忽略大小写
        //在匹配时忽略abc大小写
        String regex6="a(?i)bc";//忽略bc大小写
        System.out.println("abc".matches(regex6));
        System.out.println("aBc".matches(regex6));
//身份证号码的严格校验
//编写正则的小心得：
//第一步：按照正确的数据进行拆分
//第二步：找每一部分的规律，并编写正则表达式
//第三步：把每一部分的正则拼接在一起，就是最终的结果
//书写的时候：从左到右去书写。

//410801 1993 02 28 457x
//前面6位：省份，市区，派出所等信息 第一位不能是0，后面5位是任意数字  [1-9]\\d{5}
//年的前半段：18 19 20                                           (18|19|20)
//年的后半段：任意数字出现两次                                     \\d{2}
//月份：01 ~ 09 10 11 12                                         (0[1-9]|1[0-2])
//日期：01 ~ 31                                                  (0[1-9]|[12]\\d|3[01])
//后面四位：任意数字出现3次 最后一位可以是数字也可以是大写X或者小写x   \\d{3}[\\dXx]
        String regex7="[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]";
        System.out.println("____-___________________");
        System.out.println("41080119930228457x".matches(regex7));
        System.out.println("510801197609022309".matches(regex7));
        System.out.println("15040119810705387X".matches(regex7));
        System.out.println("130133197204039024".matches(regex7));
        System.out.println("430102197606046442".matches(regex7));
    }
}
